//
//  NvAssetManager.h
//  SDKDemo
//
//  Created by dx on 2018/6/8.
//  Copyright © 2018年 meishe. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "NvAsset.h"

@protocol NvAssetManagerDelegate <NSObject>
@optional

/**
 * 获取到在线素材列表后执行该回调。
 */
- (void)onRemoteAssetsChanged:(BOOL)hasNext;

/**
 * 获取到在线素材列表失败执行该回调。
 */
- (void)onGetRemoteAssetsFailed;

/**
 * 下载在线素材进度执行该回调。
 */
- (void)onDownloadAssetProgress:(NSString *)uuid
                       progress:(int)progress;

/**
 * 下载在线素材失败执行该回调。
 */
- (void)onDonwloadAssetFailed:(NSString *)uuid;

/**
 * 下载在线素材完成执行该回调。
 */
- (void)onDonwloadAssetSuccess:(NSString *)uuid;

/**
 * 如果素材为异步安装，安装完成后执行该回调。
 */
- (void)onFinishAssetPackageInstallation:(NSString *)uuid;

/**
 * 如果素材为异步安装，升级完成后执行该回调。
 */
- (void)onFinishAssetPackageUpgrading:(NSString *)uuid;

/**
 * 检查网络状态后执行该回调。
 */
- (void)onCheckNetworkState:(BOOL)isNetAvailable;
@end

@interface NvUserAssetInfo: NSObject

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *coverUrl;
@property (nonatomic, assign) int categoryId;
@property (nonatomic, assign) AspectRatio aspectRatio;
@property (nonatomic, assign) int remotePackageSize;
@end

@interface NvCustomStickerInfo: NSObject
@property (nonatomic, strong) NSString *uuid; //自定义贴纸uuid
@property (nonatomic, strong) NSString *templateUuid; //自定义贴纸模板uuid
@property (nonatomic, strong) NSString *imagePath; //自定义贴纸图片路径
@property (nonatomic, assign) int order; //显示顺序
@end

@interface NvAssetManager : NSObject

+ (NvAssetManager *)sharedInstance;

/**
 * 下载在线素材信息
 */
- (void)downloadRemoteAssetsInfo:(AssetType)assetType
                     aspectRatio:(AspectRatio)aspectRatio
                      categoryId:(int)categoryId
                            page:(int)page
                        pageSize:(int)pageSize;

/**
 * 下载素材
 */
- (BOOL)downloadAsset:(NSString *)uuid;

/**
 * 取消下载素材
 */
- (BOOL)cancelAssetDownload:(NSString *)uuid;

/**
 * 获取在线素材信息
 */
- (NSArray *)getRemoteAssets:(AssetType)assetType
                 aspectRatio:(AspectRatio)aspectRatio
                  categoryId:(int)categoryId;

/**
 * 获取可用素材id列表
 */
- (NSArray *)getUsableAssets:(AssetType)assetType
                 aspectRatio:(AspectRatio)aspectRatio
                  categoryId:(int)categoryId;

/**
 * 获取预装素材id列表
 */
- (NSArray *)getReservedAssets:(AssetType)assetType
                   aspectRatio:(AspectRatio)aspectRatio
                    categoryId:(int)categoryId;

/**
 * 获取素材对象
 */
- (NvAsset *)getAsset:(NSString *)uuid;

/**
 * 搜索本地素材，搜索结果存入素材字典
 */
- (void)searchLocalAssets:(AssetType)assetType;

/**
 * 搜索预装素材，搜索结果存入素材字典
 */
- (void)searchReservedAssets:(AssetType)assetType
                  bundlePath:(NSString *)bundlePath;

/**
 * 保存素材信息到user defaults
 */
- (void)setAssetInfoToUserDefaults;

/**
 * 代理对象
 */
@property (nonatomic, weak) id<NvAssetManagerDelegate> delegate;

/**
 * 所有素材字典，包括本地素材和在线素材
 */
@property (nonatomic, strong) NSMutableDictionary *assetDict;

/**
 * 同时下载限制个数
 */
@property (nonatomic, assign) int maxConcurrentAssetDownloadNum;

/**
 * 等待下载队列
 */
@property (nonatomic, strong) NSMutableArray *pendingAssetsToDownload;

/**
 * 正在下载的个数
 */
@property (nonatomic, assign) int downloadingAssetsCounter;

/**
 * 在线素材的顺序表
 */
@property (nonatomic, strong) NSMutableDictionary *remoteAssetsOrderedList;

/**
 * 自定义贴纸素材。说明：自定义贴纸只有自定义图片的路径和自定义模板的包，没有单独的自定义贴纸包，所以需要单独存储。
 * 并且自定义贴纸的信息存储在User defaults里面。
 */
@property (nonatomic, strong) NSMutableDictionary *customStickerDict;

/**
 * 是否同步安装素材，默认同步安装。
 */
@property (nonatomic, assign) BOOL isSyncInstallAsset;

@end
